#include "stc12c5a60s2.h" #include #define RED 0XF800 //红色 #define GREEN 0X07E0 //绿色 #define BLUE 0X001F //蓝色 #define WHITE 0XFFFF //白色 #define DATA_H P2 #define DATA_L P0 sbit LCD_CS = P0^3; sbit LCD_RESET = P0^0; sbit LCD_MOSI = P0^4; sbit LCD_MISO = P0^5; sbit LCD_SCK = P0^1;//scl void Delay1ms() //@12.000MHz { unsigned char i, j; i = 12; j = 169; do { while (--j); } while (--i); } void delay_ms(unsigned int ms) { while(ms--) { Delay1ms(); } } unsigned char SPI_RW(unsigned char byte) { unsigned char bit_ctr; for(bit_ctr=0;bit_ctr<8;bit_ctr++) // 输出8位 { LCD_SCK=0; LCD_MOSI=(byte&0x80); // MSB TO MOSI byte=(byte<<1); // shift next bit to MSB LCD_SCK=1; byte|=LCD_MISO; // capture current MISO bit } return byte; } void LCD_WR_DATA(unsigned char val) { // LCD_CS=0; LCD_SCK=0; LCD_MOSI=1; LCD_SCK=1; SPI_RW(val); // LCD_CS=1; } void LCD_WR_REG(unsigned char reg) { // LCD_CS=0; LCD_SCK=0; LCD_MOSI=0; LCD_SCK=1; SPI_RW(reg); // LCD_CS=1; } //void SPI_RW(unsigned char i) //{ // unsigned char n; // // for(n=0; n<8; n++) // { // if(i&0x80) LCD_MOSI=1; // else LCD_MOSI=0; // i<<= 1; // LCD_SCK=0;_nop_(); _nop_();_nop_();_nop_(); // LCD_SCK=1;_nop_();_nop_();_nop_();_nop_(); // } //} //void LCD_WR_REG(unsigned int i) //{ // unsigned char n,m; // // LCD_CS = 0; // LCD_SCK = 0; // LCD_MOSI = 0; // LCD_SCK = 1; // // m=0x80; // for(n=0; n<8; n++) // { // if(i&m) // { // LCD_SCK = 0; // LCD_MOSI = 1; // LCD_SCK = 1; // } // else // { // LCD_SCK = 0; // LCD_MOSI = 0; // LCD_SCK = 1; // } // m=m>>1; // // } // // LCD_CS = 1; //} //void LCD_WR_DATA(unsigned int i) //{ // unsigned char n,m; // // LCD_CS = 0; // LCD_SCK = 0; // LCD_MOSI = 1; // LCD_SCK = 1; // // m=0x80; // for(n=0; n<8; n++) // { // if(i&m) // { // LCD_SCK = 0; // LCD_MOSI = 1; // LCD_SCK = 1; // } // else // { // LCD_SCK = 0; // LCD_MOSI = 0; // LCD_SCK = 1; // } // m=m>>1; // // } // // LCD_CS = 1; //} void LCD_Init() { P0=0; P2=0; LCD_RESET=0; delay_ms(10); LCD_RESET=1; delay_ms(120); //*************LCD Driver Initial st7796**********// //delay_ms(120); // Delay 120ms //LCD_WR_REG(0x11); // Sleep Out //delay_ms(120); // Delay 120ms //LCD_WR_REG(0xf0); //LCD_WR_DATA(0xc3); // //LCD_WR_REG(0xf0); //LCD_WR_DATA(0x96); // //LCD_WR_REG(0x36); //LCD_WR_DATA(0x48); // // LCD_WR_REG(0x3A); //LCD_WR_DATA(0x55); // //LCD_WR_REG(0xB4); //LCD_WR_DATA(0x01); ////LCD_WR_REG(0xb0); ////LCD_WR_DATA(0x02); //X X X X vscp hscp pkp dep //LCD_WR_REG(0xb5); //LCD_WR_DATA(0x02); //vfp[7:0] //LCD_WR_DATA(0x02); //vbp[7:0] //LCD_WR_DATA(0x00); //LCD_WR_DATA(0x04); //hbp[7:0] //LCD_WR_REG(0xb6); //LCD_WR_DATA(0xa0); //PYPASS RCM RM DM PTG[1:0] PT[1:0] DEM 20 60 //LCD_WR_DATA(0x02); // X GS SS SM ISC[3:0] 02 //LCD_WR_DATA(0x3B); // 0 0 NL[5:0] //LCD_WR_REG(0xB7); //LCD_WR_DATA(0xC6); // //LCD_WR_REG(0xe8); //LCD_WR_DATA(0x40); //LCD_WR_DATA(0x8a); //LCD_WR_DATA(0x00); //LCD_WR_DATA(0x00); //LCD_WR_DATA(0x29); //LCD_WR_DATA(0x19); //LCD_WR_DATA(0xa5); //LCD_WR_DATA(0x33); // //LCD_WR_REG(0xc1); //LCD_WR_DATA(0x06); // //LCD_WR_REG(0xc2); //LCD_WR_DATA(0xa7); // //LCD_WR_REG(0xc5); //LCD_WR_DATA(0x18); // //LCD_WR_REG(0xe0); //Positive Voltage Gamma Control //LCD_WR_DATA(0xf0); //LCD_WR_DATA(0x09); //LCD_WR_DATA(0x0b); //LCD_WR_DATA(0x06); //LCD_WR_DATA(0x04); //LCD_WR_DATA(0x15); //LCD_WR_DATA(0x2f); //LCD_WR_DATA(0x54); //LCD_WR_DATA(0x42); //LCD_WR_DATA(0x3c); //LCD_WR_DATA(0x17); //LCD_WR_DATA(0x14); //LCD_WR_DATA(0x18); //LCD_WR_DATA(0x1b); // //LCD_WR_REG(0xe1); //Negative Voltage Gamma Control //LCD_WR_DATA(0xf0); //LCD_WR_DATA(0x09); //LCD_WR_DATA(0x0b); //LCD_WR_DATA(0x06); //LCD_WR_DATA(0x04); //LCD_WR_DATA(0x03); //LCD_WR_DATA(0x2d); //LCD_WR_DATA(0x43); //LCD_WR_DATA(0x42); //LCD_WR_DATA(0x3b); //LCD_WR_DATA(0x16); //LCD_WR_DATA(0x14); //LCD_WR_DATA(0x17); //LCD_WR_DATA(0x1b); //LCD_WR_REG(0xf0); //LCD_WR_DATA(0x3c); //LCD_WR_REG(0xf0); //LCD_WR_DATA(0x69); //LCD_WR_REG(0x21); //delay_ms(120); //Delay 120ms //LCD_WR_REG(0x29); //Display ON //LCD_WR_REG(0x2c); //*************LCD Driver Initial **********// delay_ms(120); // Delay 120ms LCD_WR_REG(0x11); // Sleep Out delay_ms(120); // Delay 120ms LCD_WR_REG(0xf0) ; LCD_WR_DATA(0xc3) ; LCD_WR_REG(0xf0) ; LCD_WR_DATA(0x96) ; LCD_WR_REG(0x36) ; LCD_WR_DATA(0x48) ; LCD_WR_REG(0x3A); LCD_WR_DATA(0x55); LCD_WR_REG(0xB4) ; LCD_WR_DATA(0x01) ; LCD_WR_REG(0xe8) ; LCD_WR_DATA(0x40) ; LCD_WR_DATA(0x82) ; LCD_WR_DATA(0x07) ; LCD_WR_DATA(0x18) ; LCD_WR_DATA(0x27) ; LCD_WR_DATA(0x0a) ; LCD_WR_DATA(0xb6) ; LCD_WR_DATA(0x33) ; LCD_WR_REG(0xc2) ; LCD_WR_DATA(0xA7) ; LCD_WR_REG(0xc5) ; LCD_WR_DATA(0x0b) ; LCD_WR_REG(0xe0) ; //Positive Voltage Gamma Control LCD_WR_DATA(0xf0); LCD_WR_DATA(0x07); LCD_WR_DATA(0x11); LCD_WR_DATA(0x14); LCD_WR_DATA(0x16); LCD_WR_DATA(0x0c); LCD_WR_DATA(0x42); LCD_WR_DATA(0x55); LCD_WR_DATA(0x50); LCD_WR_DATA(0x0b); LCD_WR_DATA(0x16); LCD_WR_DATA(0x16); LCD_WR_DATA(0x20); LCD_WR_DATA(0x23); LCD_WR_REG(0xe1) ; //Negative Voltage Gamma Control LCD_WR_DATA(0xf0); LCD_WR_DATA(0x06); LCD_WR_DATA(0x11); LCD_WR_DATA(0x13); LCD_WR_DATA(0x14); LCD_WR_DATA(0x1c); LCD_WR_DATA(0x42); LCD_WR_DATA(0x54); LCD_WR_DATA(0x51); LCD_WR_DATA(0x0b); LCD_WR_DATA(0x16); LCD_WR_DATA(0x15); LCD_WR_DATA(0x20); LCD_WR_DATA(0x22); LCD_WR_REG(0xf0) ; LCD_WR_DATA(0x3c) ; LCD_WR_REG(0xf0) ; LCD_WR_DATA(0x69) ; delay_ms(120); // Delay 120ms LCD_WR_REG(0x21) ; // rgb inverse LCD_WR_REG(0x29) ; // Display ON } void LCD_SetArea(unsigned int stx,unsigned int sty,unsigned int endx,unsigned int endy) { LCD_WR_REG(0x2A); LCD_WR_DATA(stx>>8); LCD_WR_DATA(stx&0xff); LCD_WR_DATA(endx>>8); LCD_WR_DATA(endx&0xff); LCD_WR_REG(0x2B); LCD_WR_DATA(sty>>8); LCD_WR_DATA(sty&0xff); LCD_WR_DATA(endy>>8); LCD_WR_DATA(endy&0xff); } void LCD_Clear(unsigned int color) { unsigned int i,j; LCD_SetArea(0,0,319,479); LCD_WR_REG(0x2C); for(i=0;i<320;i++) { for(j=0;j<480;j++) { LCD_WR_DATA(color>>8); LCD_WR_DATA(color); } } } void main() { LCD_CS=0; LCD_Init(); while(1) { LCD_Clear(RED); LCD_Clear(0); LCD_Clear(GREEN); LCD_Clear(BLUE); while(1); } }